type ObjectID = string;

// 工具
export interface ToolSchema {
  // 基础信息
  _id: ObjectID, // ID
  name: string, // 工具标题名称
  icon: string, // 工具图标
  permalink: string, // 工具固定链接
  description: string, // 工具简介

  status: number, // 状态 eg. 0-未发布 1-已发布

  // 描述性内容
  tags: ObjectID[], // 工具标签组
  score: number, // 工具评分
  charge?: { // 工具费用信息
    isFree: boolean, // 是否免费
    prices?: number, // 直接价格
    paymentRules?: string[], // 付费规则
  },
  resources: { // 关联外部站点资源
    origin: ObjectID, // 外部资源平台
    url: string, // 关联资源链接
    summary?: string, // 外部资源摘要
    type: string, // 资源内容类型 eg. '图文' | '视频' | '音频' | ...
    embedType: string, // 资源嵌入类型 eg. '跳转' | '嵌入' | '卡片' | ...
  }[],

  // 统计信息
  statistics: {
    likeCount: number, // 点赞次数
    clickCount: number, // 点击次数
    showCount: number, // 展示次数
    forwardCount: number, // 转发次数
    collectionCount: number, // 收藏次数
  }
  // 伪造统计信息
  fakeStatistics: {
    // ..
  }

  // 动态信息 - 用户评论
  comments: {
    ip: string, // 评论人 IP
    userAgent: string, // 评论用户代理
    name?: string, // 评论人名称 - 可选
    content: string, // 评论内容
    status: string, // 状态 0 1
    createdAt: Date,
    deletedAt: Date,
  }[],

  // 工具站点信息
  siteInfo: {
    responseTime: number, // 响应时间
    statusCode: number, // 响应码
  },

  // 抓取源数据
  source: {
    origin: string, // 内容来源
    pageUrl: string, // 内容来源 URL
    pageContent: object, // 原始页面提取内容
  },

  // 数据信息
  createdAt: Date, // 创建时间
  updatedAt: Date, // 更新时间
  deletedAt?: Date, // 删除时间
}

// 标签
export interface ToolTagSchema {
  // 基础信息
  _id: ObjectID, // ID
  // name: string,           // 标签名称
  // type: number,           // 标签类型 - 一级分类
  name: string, // 标签名称
  description: string, // 标签介绍
  color: string, // 标签颜色
  level: number, // 标签等级 1 2 3
  // 1 前端、设计 为 1 级
  // 2 界面交互、设计规范、前端框架、构建工具......
  // 3 Web、绿色、付费、收费、Ant Design、Vue

  // 关联信息
  parentTags: ObjectID[], // 父标签
  similarTags: ObjectID[], // 相似标签

  // 数据信息
  createdAt: Date, // 创建时间
  updatedAt: Date, // 更新时间
  deletedAt?: Date, // 删除时间
}

// 专题
export interface TopicSchema {
  // 基础信息
  _id: ObjectID, // ID
  // name: string,           // 标签名称
  // type: number,           // 标签类型 - 一级分类
  name: string, // 名称
  description: string, // 介绍

  status: number, // 状态 eg. 0-未发布 1-已发布

  // 专题包含标签
  tags: ObjectID[], // 专题包含一级标签

  // 数据信息
  createdAt: Date, // 创建时间
  updatedAt: Date, // 更新时间
  deletedAt?: Date, // 删除时间
}

// 外部平台
export interface ExternalOriginSchema {
  // 基础信息
  _id: ObjectID, // ID
  name: string, // 名称
  type: string, // 平台类型 eg. '博客' | '视频平台' | ...
  permalink: string, // 平台固定链接
  previewImage: string, // 平台预览图片

  // 数据信息
  createdAt: Date, // 创建时间
  updatedAt: Date, // 更新时间
  deletedAt?: Date, // 删除时间
}

// 编辑记录日志
export interface EditLogSchema {
  // 基础信息
  _id: ObjectID, // ID
  editType: string, // 编辑类型 eg. 'create' | 'update' | 'delete' | 'publish' | 'reject'
  data: Object, // 编辑信息记录

  editorId: ObjectID, // 编辑人 ID
  editorName: string, // 编辑人名称

  reviewerId: ObjectID, // 审核人 ID
  reviewerName: string, // 审核人名称

  status: string, // 编辑记录状态 eg. '待审核' | '审核通过' | ...

  // 数据信息
  createdAt: Date, // 创建时间
  updatedAt: Date, // 更新时间
}

// 基础用户信息
// ... 内容管理后台校验
export interface UserSchema {
  // 基础信息
  _id: ObjectID, // ID - 访问用户自动生成
  name?: string, // 用户名
  role?: number, // 用户角色 eg. 0.管理员 | 1.注册用户 | 2.版主 | 3.VIP | 99.游客
  phone?: string, // 手机号
  email?: string, // 邮箱 - 可选

  // 未注册
  mark?: { // 游客标识信息
    ip: string, // IP
    userAgent: string, // 用户代理 + code - 可以使用通用站点统计
  },

  // 微信注册
  wechat?: { // 绑定微信
    openId: string, // openID
    avatar: string, // 用户头像
    name: string, // 用户昵称
    // ...
  },

  // 与工具的互动
  toolLike?: string[],
  toolCollection?: string[],
  toolForward?: string[],

  // 数据信息
  createdAt: Date, // 创建时间
  updatedAt: Date, // 更新时间
}

// 用户日志
export interface UserLogSchema {
  // 基础信息
  _id: ObjectID, // ID
  userId: ObjectID, // 日志用户 ID
  level: number, // 日志等级
  // 1. 实时/高优先级
  // 2. 实时/低优先级
  // 3. 非实时/高优先级
  // 4. 非实时/低优先级

  // 行为发生位置
  location: {
    url: string, // 页面 URL
    module: string, // 当前用户模块
  },
  agent: {
    ip: string, // 客户端 IP
    userAgent: string, // 客户端信息 - 浏览器
    platform: string, // 客户端平台 - 硬件与操作系统
  },

  // 行为信息
  type: number, // 用户行为类型 eg. 'toolPage' | 'timeline'
  // 用户行为类型
  // 1. view: 各种浏览行为，例如页面链接跳转、按钮点击等
  // 2. trigger-event: 触发型事件，例如各种埋点
  action: string, // 用户行为操作 eg. 'enter' | 'click' | 'search' | 'exit'
  value: object, // 用户行为数据 eg. { keywords: 1198 }
  // eg. type=timeline  action=enter      value: {time: '2021/6/25T12:48:32.321'}
  // eg. type=timeline  action=activate   value: {time: '2021/6/25T12:48:32.321'}
  // eg. type=timeline  action=leave      value: {time: '2021/6/25T12:48:32.321'}
  /**
   * @example
   * // 浏览器行为
   * {
   *     type: 1,
   *     action: 'click',
   *     value: {
   *         el: 'body>div.q-page>div.q-btn',
   *         text: '搜索',
   *     }
   * }
   * // 埋点事件
   * {
   *     type: 2,
   *     action: '@tool/like',
   *     value: {
   *         id: '60b45a5645855e1d9c133bd6',
   *     }
   * }
   */

  // 日志状态
  status: number,
  // 日志状态 0.待处理 1.处理中 2.已处理

  // 数据信息
  createdAt?: Date, // 创建时间
  updatedAt?: Date, // 更新时间
}
